// Copyright (c) 2012 Ecma International.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
es5id: 15.2.3.6-4-213
description: >
    Object.defineProperty - 'O' is an Array, 'name' is an array index
    named property, 'name' makes no change if the value of every field
    in 'desc' is the same value as the corresponding field in
    'name'(desc is accessor property) (15.4.5.1 step 4.c)
includes: [propertyHelper.js]
---*/

function Test() {
    var arrObj = [];
    var getFunc = function() {
      return "100";
    };
    var setFunc = function(value) {
      arrObj.setVerifyHelpProp = value;
    };

    var desc = {
      get: getFunc,
      set: setFunc,
      enumerable: true,
      configurable: true
    };

    Object.defineProperty(arrObj, "0", {
      get: getFunc,
      set: setFunc,
      enumerable: true,
      configurable: true
    });

    Object.defineProperty(arrObj, "0", desc);

    verifyEqualTo(arrObj, "0", getFunc());

    verifyWritable(arrObj, "0", "setVerifyHelpProp");

    verifyEnumerable(arrObj, "0");

}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
